/**
 * Android平台扫码工具函数
 */

/**
 * 扫码主函数
 * @param {Object} options 扫码选项
 * @param {boolean} options.onlyFromCamera 是否只允许通过相机扫码，默认true
 * @param {Array} options.scanType 扫码类型，默认['barCode','qrCode']
 * @returns {Promise<string>} 扫码结果
 */
export function toScanCode(options = {}) {
  const defaultOptions = {
    onlyFromCamera: true, // 只允许通过相机扫码
    scanType: ['barCode', 'qrCode'], // 扫码类型 barCode一维码 qrCode二维码
    autoZoom: true // 是否启用自动放大，默认启用
  }
  
  const finalOptions = { ...defaultOptions, ...options }
  
  return new Promise((resolve, reject) => {
    uni.scanCode({
      onlyFromCamera: finalOptions.onlyFromCamera,
      scanType: finalOptions.scanType,
      autoZoom: finalOptions.autoZoom,
      success: function(res) {
        resolve(res.result)
      },
      fail: function(err) {
        reject(err)
      }
    })
  })
}

/**
 * 处理扫码内容
 * @param {string} result 扫码结果
 * @returns {Object} 解析后的对象
 */
export function scanContent(result) {
  // 1. 尝试解析JSON格式
  try {
    const jsonResult = JSON.parse(result)
    return {
      type: 'json',
      data: jsonResult
    }
  } catch (err) {
    // 2. 检查是否是WiFi配置
    if (result.startsWith('WIFI:')) {
      return parseWifiConfig(result)
    }
    
    // 3. 检查是否是URL
    if (result.startsWith('http://') || result.startsWith('https://')) {
      return {
        type: 'url',
        data: result
      }
    }
    
    // 4. 其他格式作为纯文本处理
    return {
      type: 'text',
      data: result
    }
  }
}

/**
 * 解析WiFi配置
 * @param {string} wifiString WiFi配置字符串
 * @returns {Object} WiFi配置对象
 */
function parseWifiConfig(wifiString) {
  const config = {}
  
  // 移除开头的WIFI:
  const content = wifiString.substring(5)
  
  // 解析各个参数
  const parts = content.split(';')
  parts.forEach(part => {
    if (part.includes(':')) {
      const [key, value] = part.split(':', 2)
      switch (key) {
        case 'T':
          config.encryptionType = value
          break
        case 'S':
          config.ssid = value
          break
        case 'P':
          config.password = value
          break
        case 'H':
          config.hidden = value === 'true'
          break
        default:
          config[key] = value
      }
    }
  })
  
  return {
    type: 'wifi',
    data: config
  }
}

/**
 * 扫码并解析内容
 * @param {Object} options 扫码选项
 * @returns {Promise<Object>} 解析后的扫码结果
 */
export function scanAndParse(options = {}) {
  return toScanCode(options).then(result => {
    const parsed = scanContent(result)
    return {
      raw: result,
      parsed: parsed,
      type: parsed.type
    }
  })
} 